home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 146_01 / notes.doc < prev    next >
Text File  |  1985-03-09  |  22KB  |  730 lines

  1. /*
  2. HEADER:        CUG146.10;
  3. TITLE:        A letter from Serge Stepanoff;
  4. KEYWORDS:    Serge Stepanoff, Small-C, Ron Cain;
  5. SYSTEM:        FLEX;
  6. FILENAME:    NOTES.DOC;
  7. AUTHORS:    Serge Stepanoff, Ron Cain;
  8. COMPILERS:    Small-C;
  9. */
  10.  
  11.                                Serge Stepanoff
  12.                                5469 Arlene Way
  13.                              Livermore, CA 94550
  14.  
  15. INTRODUCTION:
  16.  
  17. Small-C  is  exactly  what  the  name  implies  --  a subset of the language C
  18. developed at Bell Labs and best described in the de-facto language  definition
  19. "The C Programming Language", by Brian Kernighan and Dennis Ritchie, published
  20. by Prentice-Hall, Inc.  1978.
  21.  
  22. The   original  Small-C  compiler  was  written  by  Ron  Cain  for  the  8080
  23. microcomputer on a North Star system.  He was kind and  farsighted  enough  to
  24. place  it  in  the  public domain via articles in "Dr.  Dobbs Journal".  Since
  25. then, this  compiler  has  been  adapted  to  several  operating  systems  and
  26. microcomputers,  including  the 6809.  To this author's knowledge, this is the
  27. first adaptation for the 6800 micro under TSC's FLEX  operating  system.   The
  28. project  required  approximately  one  year's  worth  of calendar time, mainly
  29. because the work on it was carried out in a sporadic and aperiodic basis.
  30.  
  31. Initial  conversion  attempts  involved compilation directly to assembly level
  32. code, but this approach was  quickly  dropped  due  to  lack  of  any  16  bit
  33. arithmetic   in  the  6800  instruction  set  and  general  paucity  of  stack
  34. operations.  Resultant code was lengthy to say the least -- no wonder the 6809
  35. came about.  However, in the tradition of PASCAL's P-code and FORTH's threaded
  36. code,  a  solution  was  found  in  translating  to  a  pseudo-code  and  then
  37. interpreting this code on a virtual machine.  The penalty in execution time is
  38. much less than for  a  straight  interpreter  ala  BASIC  --  the  pseudo-code
  39. interpreter  and  the  run-time  library  occupy less than 2K bytes, and as an
  40. interesting side note, to execute this pseudo-code on  a  different  operating
  41. system  or  a  different  micro-  computer  requires  only  the rewrite of the
  42. interpreter and the run-time library for the target machine.
  43.  
  44. As  a  historical  note, the initial conversion was not done on a UNIX system,
  45. but rather on a PDP 11 running RSX-11 operating system and the  DECUS  version
  46. of  a  C  compiler (another public-domain User Group product) with the Small-C
  47. code supplied by DECUS (Digital Equipment  Corporation  Users  Society).   The
  48. ongoing  development of this version of the Small-C compiler is  being carried
  49. out on a SWTPC 6800 system with dual 8 inch single density floppy drives,  and
  50. 32K of RAM memory.
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.                               - 1 -                              
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73. SMALL-C USER NOTES.                                       Page  2
  74.  
  75.  
  76. OPERATION:
  77.  
  78. The Small-C compiler is invoked by typing CC on the keyboard.  No command line
  79. arguments are necessary.  A series of questions are then  asked.   After  each
  80. question, Small-C prints (in paretheses) what the possible responses are.  The
  81. capitalized response is the one that Small-C will default to if you just press
  82. RETURN.  The first question is:
  83.  
  84.      Do you want the c-text to appear (y,N) ?
  85.  
  86. This  gives  you  the  option  of interleaving the source code into the output
  87. file.  Response is Y or N (y or n  will  also  serve).   If  Y  is  given,  an
  88. asterisk will be placed at the start of each input line (to force a comment to
  89. the 6800 assembler) and the input lines will be interleaved with the  compiler
  90. generated  pseudo-code output.  If the answer is N (or just RETURN, since N is
  91. capitalized, and is the default),  only  the  generated  pseudo-code  will  be
  92. output.   NOTE:  the  TSC  assembler accepts any length labels, both lower and
  93. upper case, but only the first 6 characters are used and saved in  the  symbol
  94. table.   Therefore, if you have either functions or labels of the type MODULE1
  95. and MODULE2, the assembler will generate a multiply defined label error.   So,
  96. make sure that the first 6 characters are unique.  C'est la vie.....
  97.  
  98.      Are you compiling the whole program at once (Y,n) ?
  99.  
  100. This is a convenience (or annoyance) question.  If you type Y (or RETURN), you
  101. will be able to avoid three more technical questions, which are only needed if
  102. your  C  program  will  be  fed into Small-C in several separate compilations.
  103. (Best not to do it.)
  104.  
  105. If you answer N to the all-at-once question, you'll also be asked:
  106.  
  107.           Do you want the globals to be defined (y,N) ?
  108.  
  109.      This  question is primarily a developmental aid between machines.  If the
  110.      answer is Y, all static symbols will allocate storage within  the  module
  111.      being compiled.  This is the normal method.  If N (or RETURN), no storage
  112.      will be allocated, but symbol references will still be made in the normal
  113.      way.   Essentially,  this question allows the user to specify all or none
  114.      of the static symbols 'external'.
  115.  
  116.           Is the output file the first one the assembler will see (y,N) ?
  117.  
  118.      If it is, Small-C will put out a short prologue that parses  the  command
  119.      line parameters (if any), sets up the stack, and calls the C program as a
  120.      subroutine, so that a return to  FLEX  may  be  made  properly  when  the
  121.      routine is finished.
  122.  
  123.           Starting number for labels (0) ?
  124.  
  125.      This lets you supply the first label number generated by the compiler for
  126.      its internal labels (which will typically be "ccNNN", where  "NNN"  is  a
  127.      decimal  number).   This  option allows modules to be compiled separately
  128.      and later appended on the source level without  generating  multi-defined
  129.  
  130.  
  131.  
  132.                               - 2 -                              
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139. SMALL-C USER NOTES.                                       Page  3
  140.  
  141.  
  142.      labels.  If you just press RETURN, labels will start at "cc000".
  143.  
  144. Now a question that requires some consideration:
  145.  
  146.      Should I pause after an error (y,N) ?
  147.  
  148. If your are doing a long compilation, the sort that you go  off  and  mow  the
  149. lawn during, you run the risk of having an error message scroll off the screen
  150. while you're away.  If you answer Y to this question, Small-C  will,  when  it
  151. finds an error, stop everything it's doing until you tell it to proceed.  That
  152. way, you are assurred of knowing about ALL the errors that the compiler found.
  153. FLEX  users  have a third choice -- set the TTYSET screen full Pause parameter
  154. to YES.  This will stop any tendency to scroll off important messages  at  the
  155. expense  of  having  to  hit  ESCAPE  every time the screen prints the maximum
  156. number of lines.
  157.  
  158.      Output filename ?
  159.  
  160. This question gets the name of the file to be created.  If you press   RETURN,
  161. the  output  of the compiler will go to the screen.  Doing this, especially in
  162. conjunction with having the C source code interleaved with the normal  output,
  163. is one way of learning what the compiler does with your source.
  164.  
  165. CAUTION !!!!  If the output file already exists, the compiler will  delete  it
  166. with  NO warning to you -- which makes for frustration at least when you meant
  167. to type in FILE.A and instead typed FILE.C.... If this worries you, modify the
  168. run-time routine "fopen" in the interpreter.
  169.  
  170.      Input filename ?
  171.  
  172. This  question  gets  the  name  of  the C source module to use as input.  The
  173. question will be repeated each time a name is supplied, allowing the  user  to
  174. create  an  output  file consisting of many separate files.  (It behaves as if
  175. you had appended them together and submitted only the one file.)  Press RETURN
  176. to  end  the  compilation  process.  Again CAUTION!!!, if you mistype the file
  177. name and the file  is  not  found,  the  compiler  will  exit  to  FLEX  after
  178. appropriate message.  If this  annoys you go fix "fopen".
  179.  
  180. Here is how you would compile the sample program "WC.C":
  181.  
  182. +++CC          [invoke the compiler]
  183.  
  184. * * *  greetings and
  185.  
  186.               salutations  with a note
  187.  
  188.                   for the sponsor